package com.borya.dao;

import com.borya.model.db.*;
import com.borya.model.entity.ApplyRecord;
import com.borya.model.entity.ChangeAddressInfo;
import com.borya.model.entity.SupUserInfo;

import java.util.List;
import java.util.Map;

public abstract interface MerchantDAO {


    Merchant getByDealerId(String dealerId);

    Merchant getByMerchantId(String merchantId);

    String getUserTypeNickName(int id);

    /**** 获取商户实名补录状态 ****/
    int getfillStatus(String merchantId);

    /*** 修改商户实名补录状态 ****/
    boolean updateStatus(String merchantId, int status);

    /*****
     * 获取所有下级推广商户
     * @param dealerId
     * @return
     */
    List<Merchant> getLowerByDealerId(String dealerId);

    /**
     * 根据邀请码商户信息
     **/
    SupUserInfo getUserInfoByInviteCode(String inviteCode);


    /**
     * 插入权限申请订单
     *
     * @param app
     * @return
     */
    boolean addApplyPowerOrder(ApplyPower app);

    /**
     * 由商户编号查询出权限信息
     *
     * @param dealerId
     * @return
     */
    Map<String, String> getPower(String dealerId);


    /**
     * 查询所有可开通售卡范围
     *
     * @return
     */
    List<Scope> getAllScopes(String type);

    /**
     * 查询所有可开通售卡范围
     *
     * @param dealerId
     * @return
     */
    List<Scope> getScopes(String dealerId, String type);

    /**
     * 商户是否已有该地区售卡权限
     *
     * @param scopeId
     * @param dealerId
     * @return
     */
    boolean isScopeById(String dealerId, String scopeId, Integer type);

    /**
     * 查询申请商户对应售卡范围 的申请记录
     *
     * @param dealerId
     * @param scopeId
     * @return
     */
    ApplyPower getApplyScope(String dealerId, String scopeId);

    /**
     * 获取申请权限、区域记录
     *
     * @param dealerId
     * @param pageSize
     * @param pageIndex
     * @return
     */
    List<ApplyRecord> getApplyRecords(String dealerId, Integer pageSize, Integer pageIndex);

    /**
     * 获取商户营运商权限情况
     *
     * @param dealerId
     * @param type
     * @return
     */
    List<String[]> getAgentState(String dealerId, String type);

    /**
     * 区域编号查询区域实体
     *
     * @param scopeId
     * @return
     */
    Scope findScopeById(String scopeId);


    /**
     * 查询商户所有scops tb_merchant_scope_config
     *
     * @param dealerId
     * @return
     */
    List<String> merchantScops(String dealerId);

    /**
     * 查询进行中的售卡权限申请订单
     *
     * @param dealerID
     * @return
     */
    List<String> applyIngScop(String dealerID);

    /**
     * 获取授权牌相关信息
     *
     * @return
     */
    ShqpInfo getShqpInfo(String dealerId);

    /**
     * 修改授权牌信息
     *
     * @param shqpInfo
     * @param type     1新增2修改
     * @return
     */
    boolean updShqpInfo(ShqpInfo shqpInfo, int type);

    /**
     * 获取即将到期的授权牌信息  给商户发消息
     *
     * @return
     */
    List<ShqpInfo> timeEndList(int time);

    /**
     * 发送授权牌即将过期消息
     *
     * @param dealerIds
     * @param msgList
     * @return
     */
    boolean shqpMsg(List<ShqpInfo> dealerIds, List<Message> msgList);


    /**
     * 查询获取商户id结果
     *
     * @param orderId
     * @return
     */
    String getDealerIdResult(String orderId);

    /**
     * 获取商户信息补充内容
     *
     * @return
     */
    ReplenishModel getReplenish(String merchantId);

    /**
     * 通过userId查询商户使用地区信息
     *
     * @param userId
     * @return
     */
    ChangeAddressInfo getMerchantByUserId(String userId);

    /**
     * 增加申请更改地址信息
     *
     * @param info
     * @return
     */
    boolean insertChangeAddress(ChangeAddressInfo info);

    /**
     * 通过userId查询商户使用上次信息
     *
     * @param userId
     * @return
     */
    ChangeAddressInfo getChangeAddressLast(String userId);

    boolean countChangeAddress(String merchantId);

    UserClientDetail getUserClientDetailByMerchantId(String userId);

    UserClientDetail getUserClientByUserId(String userId);

    UserClientDetail getUserClientByDealerId(String dealerId, Integer isMain);

    List<Merchant> getMerchantByBusinessLicence(String businessLicence, Integer detailType);

}
